# -*- coding:utf-8 -*-
# @Time     : 2022/3/24 14:22
# @Author   : 林旖睿
# @Email    : 473429801@qq.com
# @File     : one_day.py
# @Software : PyCharm



### 定义链表

class Nodelist(object):
    def __init__(self): # self是在定义类的时候必须有的，但是在调用的时候不必传入相应的参数
        self.val= None
        self.next = None
### 对链表进行操作

class Listnodehandle():
    def __init__(self):
        self.cur_node = None


    def add(self,data):
        #### 链表中加入数字
        node = Nodelist()
        node.val=data
        node.next = self.cur_node
        self.cur_node = node
        return node
    def print_listnode(self,node):
        # 打印链表中的数据
        while node:
            print('\nnode:',node,'value:',node.val,'next:',node.next)
            node = node.next
    def _reverse(self,nodelist):
    #  对链表进行翻转并，记录为列表
        list=[]
        while nodelist:
            list.append(nodelist.val)
            nodelist = nodelist.next
        # list=list[::-1] ##没有该行，得到的列表list是链表的正序，有该行代码，得到列表反序。但是若要得到原链表翻转的心链表，不必将列表list翻转。

    #   对链表进行翻转，依旧保存为链表
        result = Nodelist()
        result_handle = Listnodehandle()
        for i in list :
            result = result_handle.add(i)
        return result,list
res = Listnodehandle()
List1 = Nodelist()
list2 = [1,2,3,4,5]

for i in list2:
    List1 = res.add(i)
List1_reverse,list1= res._reverse(List1)
print(list1)
res.print_listnode(List1)
res.print_listnode(List1_reverse)

############一些附带查询的知识，与该题关系不大。
# list = iter([1,2,3,4,5])
# # print(type(list))
# ## 打印出的list的类型为<class 'list_iterator'>，迭代器
# ## 迭代器和列表的区别在于：列表和迭代器的根本区别在于，列表按特定顺序包含多个对象，因此可以从中间的某个位置拉出其中一个对象，而迭代器按特定顺序生成多个对象，通常根据请求动态创建它们
# while True:
#     try:
#         a = next(list)
#         print(a)
#     except StopIteration:
#         break
# #### next函数的用法。


